.TH std::ranges::common_range 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::ranges::common_range \- std::ranges::common_range

.SH Synopsis
   Defined in header <ranges>
   template< class T >

     concept common_range =                                               \fI(since C++20)\fP

       ranges::range<T> && std::same_as<ranges::iterator_t<T>,
   ranges::sentinel_t<T>>;

   The common_range concept is a refinement of range for which std::ranges::begin() and
   std::ranges::end() return the same type (e.g. all standard library containers).

.SH Example


// Run this code

 #include <ranges>

 struct A {
     char* begin();
     char* end();
 };
 static_assert( std::ranges::common_range<A> );

 struct B {
     char* begin();
     bool end();
 };  // not a common_range: begin/end have different types
 static_assert( not std::ranges::common_range<B> );

 struct C {
     char* begin();
 };  // not a common_range, not even a range: has no end()
 static_assert( not std::ranges::common_range<C> );

 int main() { }

.SH See also

   ranges::common_view converts a view into a common_range
   views::common       \fI(class template)\fP (range adaptor object)
   (C++20)
